﻿//2576. 求出最多标记下标
//给你一个下标从 0 开始的整数数组 nums 。
//一开始，所有下标都没有被标记。你可以执行以下操作任意次：
//选择两个 互不相同且未标记 的下标 i 和 j ，满足 2 * nums[i] <= nums[j] ，标记下标 i 和 j 。
//请你执行上述操作任意次，返回 nums 中最多可以标记的下标数目。


class Solution {
public:
    int maxNumOfMarkedIndices(vector<int>& nums)
    {
        sort(nums.begin(), nums.end());
        int n = nums.size();
        auto check = [&](int k)->bool
        {
            for (int i = 0; i < k; i++) {
                if (nums[i] * 2 > nums[nums.size() - k + i]) {
                    return false;
                }
            }
            return true;
        };
        int left = 0, right = nums.size() / 2;
        while (left <= right)
        {
            int mid = left + (right - left) / 2;
            if (check(mid))
                left = mid + 1;
            else
                right = mid - 1;
        }
        return (left - 1) * 2;
    }
};